package tree;

import java.util.LinkedList;
import java.util.Queue;

/**题目：翻转二叉树
 * @Author Gavin
 * @date 2022.01.02 21:58
 */
public class tree_11 {
    /**
     * 第一种方法：递归交换左右子树
     */
    //Time:O(n) Space:O(n)
    public static TreeNode solution_1(TreeNode root){
        if(root==null)return null;
        TreeNode left=root.left;
        TreeNode right=root.right;
        root.left=right;
        root.right=left;
        solution_1(left);
        solution_1(right);
        return root;
    }


    /**
     * 第二种：使用一个辅助队列
     */
    public static TreeNode solution_2(TreeNode root){
        if(root==null)return null;
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()){
            TreeNode node=queue.poll();
            TreeNode tmp=node.left;
            node.left=node.right;
            node.right=tmp;
            if(node.left!=null)queue.add(node.left);
            if(node.right!=null)queue.add(node.right);
        }
        return root;
    }
}
